#ifndef NODODATOS_H
#define NODODATOS_H

#include <ostream>
#include "INodo.h"
#include "IRegistro.h"


class NodoDatos : public INodo {
	private:
		int _proximoNodo;

		// Construye un separador entre este nodo y el nodo "n"
		IRegistro* construirRegistroDivisor(INodo& n);
		std::string terminoDivisorMinimo(IRegistro* regIzq, IRegistro* regDer) const;

	public:
		NodoDatos();
		~NodoDatos();

		// IBloque
		unsigned int serialize(char* &arrBytes);
		void deSerialize(char* arrBytes);

		int getNextNodo() const;
		void setNextNodo(int pos);

		unsigned int getSize() const;

		// Esto es lo que permite aplicar el front coding a los registros de datos
		friend class FrontCoder;

		// Sobre-escritas para poder actualizar el encodeo de los datos
		virtual IRegistro* splitNodo(INodo& nodo);
		virtual Resultado agregarRegistro(IRegistro* reg);
		virtual Resultado quitarRegistroPorId(const IRegistro& reg);
		virtual Resultado modificarRegistroPorId(IRegistro* reg);
};

#endif
